#include "mainwindow.h"
#include "ui_mainwindow.h"

#include "dynamiclayout.h"

#include <QDebug>
#include <QList>


#include <QColor>
#include <QRandomGenerator>

#include "qcustomplot.h"
#include "curveplotmanager.h"
#include "curvedialog.h"

/**
 * @brief 生成随机背景色（HSL颜色空间）
 * @param maxLightness 最大亮度值(0-255)，默认200避免过浅
 * @param alpha 透明度(0-255)，默认不透明
 * @return 适合作为背景的QColor对象
 *
 * 该实现采用HSL颜色空间生成更自然的随机色[3,5](@ref)
 * 通过限制亮度范围确保背景可读性[7](@ref)
 */
QColor MyRandomBackgroundColor(int maxLightness = 200, int alpha = 255)
{
    Q_ASSERT(maxLightness >= 0 && maxLightness <= 255);

    auto* generator = QRandomGenerator::global();
    return QColor::fromHsl(
        generator->bounded(360),    // 色相0-359
        generator->bounded(50, 256),// 饱和度50-255（避免灰度色）
        generator->bounded(maxLightness),
        alpha
    );
}

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    ui->widget_Op->hide();  // 隐藏


    CurvePlotManager *CurManage = new CurvePlotManager(ui->tabWidget);  // 实例化曲线图管理类
    QString tabName = QString("Tab_%1").arg(ui->tabWidget->count() + 1);// 生成Tab名称
    m_CurveManagerMap.insert(tabName, CurManage);   // 存储信息

    ui->tabWidget->addTab(CurManage, tabName);// 添加到TabWidget


}



MainWindow::~MainWindow()
{
    delete ui;
}



//// 处理 tab 和曲线的创建
//void MainWindow::handleTabAndCurve(const QString &tabName, const QString &chartName, const QString &curveName, const QString &dataInterval) {
//    MyWidgetLayout *widget = nullptr;

//    // 防止重复创建tab
//    if (!m_tabCurveWidget.contains(tabName)) {
//        widget = new MyWidgetLayout(ui->tabWidget);
//        widget->setWindowTitle(tabName);
//        m_tabCurveWidget.insert(tabName, widget);
//        ui->tabWidget->addTab(m_tabCurveWidget.value(tabName), tabName);

//        connect(widget, &MyWidgetLayout::dataEmptied,
//                [this](MyWidgetLayout *delWidget) {
//                    m_tabCurveWidget.remove(delWidget->windowTitle()); // 从容器中移除
//                    delWidget->deleteLater(); // 安全删除
//                });
//    } else {
//        widget = m_tabCurveWidget.value(tabName);
//    }

//    MyWidgetPlot *widgetPlot = nullptr;

//    // 防止在同一张图表中重复添加曲线
//    QMap<QString, MyWidgetPlot *> widgetPlotMap = widget->getCharts();
//    if (!widgetPlotMap.contains(chartName)) {
//        widgetPlot = new MyWidgetPlot(chartName, dataInterval.toInt(), widget);
//        widgetPlot->setWindowTitle(chartName);
//        widget->addWidgetPlot(widgetPlot);
//    } else {
//        widgetPlot = widgetPlotMap.value(chartName);
//    }

//    // 添加曲线
//    widgetPlot->addPlotGraph(curveName, m_currentChildIndex);
//}


void MainWindow::on_btn_add_clicked()
{
    QStringList curverNames = {"curver0", "curver1", "curver2", "curver3", "curver4"};

    QMap<QString, QWidget *> tabMap;
    QMap<QString, QString> newWidgetMap;

    CurveDialog *dialog = new CurveDialog(curverNames, &tabMap, this);
    connect(dialog, &CurveDialog::sendAddTabWidgetData, [&](QMap<QString, QString> datMap){
//        qDebug() << "datMap:" << datMap;
        newWidgetMap = datMap;
    });

//
    if(dialog->exec() == QDialog::Accepted)
    {
        auto start = std::chrono::high_resolution_clock::now();
        // 用户输入数据
        qDebug() << newWidgetMap;

        // 创建曲线管理类Widget
        CurvePlotManager *curManager = m_CurveManagerMap.value(QString("Tab_3"));
        if(!curManager) {
            qDebug() << "curManager:" << curManager;
            return;
        }

        // 创建图表类Widget
        QString CurverName = newWidgetMap.value("chartName");
        CurvePlot *CurvePlot = curManager->curverPlots().value(CurverName);

        // 如果没用就创建一个
        if(!CurvePlot) {
            CurvePlot = curManager->addCurvePlot(CurverName);
            if(!CurvePlot) {
                qDebug() << "CurvePlot:" << CurvePlot;
                return;
            }
        }


        // 创建曲线Graph
        QString newGraphName = newWidgetMap.value("curveName");
        QCPGraph *newGraph = CurvePlot->addCurver(newGraphName);
        if(!newGraph)
        {
            qDebug() << "newGraph:" << newGraph;
            return;
        }

        // 打印所有曲线
        qDebug() << "m_Curvers:" << CurvePlot->Curvers();


        auto end = std::chrono::high_resolution_clock::now();
        qDebug() << "Time: " << std::chrono::duration_cast<std::chrono::microseconds>(end - start).count() << "μs\n";
    } else {

    }
//
//

}

void MainWindow::on_btn_del_clicked()
{
    // 获取对应的曲线管理类
    CurvePlotManager *CurManger = m_CurveManagerMap.value("Tab_3");

    // 是否选中窗口
    if(!CurManger->currSeleted()) {
        qDebug() << "当前未选中窗口";
        return;
    }
    // 获取选中要删除的窗口名称
    QString delWidgetName = CurManger->currSeleted()->name();

    // 删除图表类Widget
    CurManger->removeCurvePlot(delWidgetName);
}
